# -*- coding: utf-8 -*-
'''
# 本脚本想法来源于《Python 自然语言处理》第七章
'''
__author__ = 'Jinkey'

import nltk
import jieba.posseg as pseg

doc_english = "The fourth Wells account moving to another agency is the packaged paper-products division of Georgia-Pacific Corp., which arrived at Wells only last fall. Like Hertz and the History Channel, it is also leaving for an Omnicom-owned agency, the BBDO South unit of BBDO Worldwide. BBDO South in Atlanta, which handles corporate advertising for Georgia-Pacific, will assume additional duties for brands like Angel Soft toilet tissue and Sparkle paper towels, said Ken Haldin, a spokesman for Georgia-Pacific in Atlanta."

doc_chinese = """
“浙嵊97506”轮当班人员无证驾驶，事发后，未采取有效搜救措施，也未向主管机关报告，擅自驶离现场，违反了《中华人民共和国海商法》（以下简称海商法）第一百六十六条，《中华人民共和国海上交通安全法》（以下简称海上交通安全法）第六条、第三十四条、第三十七条之规定；疏忽了望，未使用适合当时环境和大雾情况下的安全航速航行，未遵守能见度不良情况下的有关规定，未及早采取有效措施避让，违反了《1972年国际海上避碰规则》（以下简称避碰规则）第五条，第六条，第十九条第二、五款，第三十五第一款之规定。“台联海18”轮船舶无任何证书，当班人员无证驾驶，违反了《海上交通安全法》第四条、第五条、第六条之规定；未开启AIS信号，未使用适合当时环境和大雾情况下的安全航速航行，未遵守能见度不良情况下的有关规定，未采取有效措施避让，违反了避碰规则第六条，第十九条第二、四款，第三十五条第一款之规定。综合双方行为违法的程度、过失的轻重和行为对损害后果原因力的大小，“浙嵊97506”轮一方应承担本起碰撞事故70%的侵权责任，“台联海18”轮一方应承担本起碰撞事故30%的侵权责任。

作为“浙嵊97506”轮依法登记、对外公示的船舶经营人，江山公司未尽到安全管理职责，以致该轮长期超航区、不办理签证航行，且不满足最低安全配员标准，船员无证驾驶，由此引发了涉案事故，造成重大人员伤亡和财产损失，应与船舶所有人陈伟承担连带赔偿责任。

“浙嵊97506”轮核定航区限于沪、浙沿海，却长期往返于沪、苏与浙江舟山之间从事石料运输，系超航区航行。沪、浙沿海与江苏沿海在水深、潮流等水文地质条件方面差异显著，后者水深浅、多滩涂，对船舶操纵、避让、是否容易搁浅等的影响完全不同。核定航区在沪、浙沿海的船舶，其操纵性能、船体结构等特性可能不适合航行于江苏沿海，如违法超航区航行于江苏沿海，势必影响航行安全。该轮在船11人中仅有2人持有有效的适任证书，其余9人，尤其是履行船长、大副职责的当班人员孔某、乐某均系无证驾驶，严重危及航行安全。事实表明，该轮超航区航行、配员不足、无证驾驶，且驾驶人员不能履行安全航行职责等多种严重违法行为结合在一起，是导致事故发生的重要的、不可替代的原因。如果该轮依法在核定航区内航行，不前往位于江苏沿海的启东吕四港区，配员满足最低安全配员要求、船员适任，则涉案事故根本就不会发生。此外，该轮事故前航次和事故航次均未办理进出港签证，系相关主体为逃避海事主管部门安全监管而故意不作为，为其超航区航行、配员不足和无证驾驶创造了可能。事故航次并非该轮第一次实施上述严重违法行为，该轮近年来-•直往返于苏、沪、浙之间从事超航区运输，且不办理航行签证。陈伟作为船舶所有人及直接安排船舶营运的人，对此种严重违法行为不可能不知晓，对其可能发生的危险和造成的危害也不可能不预见，却仍长期多次实施上述严重违法行为，属于“明知可能造成损失而轻率地作为或者不作为”。

事发后，履行“浙嵊97506”轮船长职责的孔某曾通过电话向陈伟报Hi'故情况，陈伟却未明确要求孔国平依法留守现场、开展搜救，而是放任孔某自行处理。孔某驾驶船舶擅自离开现场的行为是造成“台联海18”轮沉没，导致重大人员伤亡和财产损失的重要原因。陈伟作为“浙嵊97506”轮船舶所有人，应当了解碰撞事故发生后合法、正确的处理方法，却在明知碰撞发生，本船船艏破损洞穿、球鼻首扭曲变形的情况下，未指示相关人员对对方船开展搜救，确认对方船的状态、船体是否破损、是否有沉没危险，也未向主管机关报告，而是放任孔某S行处理，最终造成严重损失。此种情形同样厲于“明知可能造成损失而轻率地作为或者不作为”。综上，陈伟在本案中有关海事赔偿责任限制的抗辩不能成立。

经南通市价格认证中心鉴定，“浙嵊97506”轮修复价格为76630元，修理天数为6天，应属合理，予以认定。该轮虽经依法检验、登记，且年审合格，但其核定的经营范围、航区仅限于沪、浙沿海、港口，该轮常年超航区航行于江苏沿海，事发前及事故航次均为超航区运营，属严重违法行为，由此获得的经营收入及盈利不应受法律保护，故对6天修理期间的船期损失不予支持。6天修理期间的维持费用请求，于法有据，可予支持。根据该轮《船舶最低安全配员证书》核定的5名船员标准，酌情认定平均每名船员工资为6000元/月（200元/天），伙食费50元/天/人，消耗的燃料、物料等费用600元/天，修理期间维持费用共计11100元。该轮财产损失总计87730元。陈伟另主张按中国人民银行同期一年期贷款利率自2013年3月19日事故发生之日起至实际支付之日止计算的利息，并无不妥，予以支持。

“台联海18”轮自2013年3月28日被打搜出水后，因打捞费用未付清，被打搜公司留置。2015年6月2日，集联公司作出评估报告书，认定该轮碰撞日市场价值为5614500元，2015年3月11日的价值为815546元，故可以认定该轮价值损失为4798954元。陈伟虽辩称该轮可以修复，但并未考虑该轮打捞后的实际情况及修复实施的可能性。事实上，该轮自打捞出水后，始终由打捞公司留置，陈伟应证明该轮在打捞公司留置情况下仍可实施维修。尤其是，陈伟曾在打捞救助协议上签字确认打捞费用的合理性，并同意出借150万元专用于支付该费用。然而，陈伟并未信守承诺，支付该笔款项，此种不作为客观.上导致“台联海18”轮持续遭受留置而未能前去修理。同时，作为侵权责任人，陈伟亦应按侵权责任比例承担“台联海18”轮被撞沉、打捞出水后又长期留置而发生的价值损失。毛雪波虽另主张“台联海18”轮的船载燃油、物料、货物，以及事故处理、检验等费用损失，似闪“台联海18”轮系“三无”船舶，缺乏船舶竹观和燃料、物料登记制度，毛雪波未提供有效证据证明损失、费用的存在及其合理性，亦未证明其系船载货物的所有人，故对此类损失赔偿请求不予支持。“台联海18”轮打捞费用实际未予支付，且打捞公司诉毛雪波、陈伟的另案诉讼尚无生效裁判，故对该项费用请求，本案诉讼中暂无法支持。相关当事人可在该项打捞费用由生效裁判确定后，按照已为生效裁判确定的碰撞责任比例自行协商解决或另行主张权利。“台联海18”轮未经检验、登记，无任何船舶证书，依法不应营运，其经营收人不应受法律保护，对其船期损失，不予支持。该轮损失共计4798954元，毛雪波另主张按中国人民银行同期一年期贷款基准利率自2013年3月19日起算至判决生效之日止的利息，并无不妥，予以支持。

根据碰撞责任比例，“浙嵊97506”轮损失87730元，应由毛雪波承担26319元，陈伟承担61411元。“台联海18”轮损失4798954元，应由毛雪波承担1439686.20元，陈伟承担3359267.80元。即陈伟应向毛雪波赔偿3359267.80元，毛雪波应向陈伟赔偿26319元，两相抵扣后，陈伟还应向毛雪波赔偿3332948.80元。江山公司应与陈伟承担连带赔偿责任。

综上，.上海海事法院依照《中华人民共和国侵权责任法》第六条第一款；《中华人民共和国海商法》第三十二条，第一百六十六条，第一百六十九条第一、二款，第二百零九条；《中华人民共和国海上交通安全法》第四条、第五条、第六条、第七条、第九条、第十条；最高人民法院《关于审理海事赔偿责任限制相关纠纷案件的若干规定》第十四条、第十九条；最高人民法院《关于审理船舶碰撞和触碰案件财产损害赔偿的规定》第七条、第八条以及《中华人民共和国民事诉讼法》第六十四条第一款之规定，于2015年11月23日判决如下：

一、被告陈伟于本判决生效之日起十日内向原告毛雪波赔偿人民币3332948.80元，以及该款项按中国人民银行同期人民币六个月至一年(含一年)贷款基准利率，自2013年3月19日起计算至判决生效之日止的利息，本项支付义务不以被告陈伟在本院设立的海事赔偿责任限制基金为限；

二、被告嵊泗县江山海运有限公司对本判决第一项确定的义务承担连带责任；

三、对原告毛雪波的其他诉讼请求不予支持；

四、对反诉原告陈伟的诉讼请求不予支持。
"""


# def ie_preprocess(document, language="en"):
#     """
#     将一段文本处理成 单词-词性 对的列表
#     Args:
#         document: 文档，字符串
#         language: 文档语言
#
#     Returns:
#         返回一个（单词，词性）的列表，暂且叫做词性化的文本
#     """
#     if language == "en":
#         # 使用 nltk 处理英文
#         sentences = nltk.sent_tokenize(document)
#         sentences = [nltk.word_tokenize(sent) for sent in sentences]
#         sentences = [nltk.pos_tag(sent) for sent in sentences]
#         return sentences
#     elif language == "cn":
#         # 使用 jieba 处理中文
#         sentences = []
#         for word, flag in pseg.cut(doc_chinese):
#             sentences.append((word, flag))
#         return sentences
#
# # 中文使用示例
# sentences_chinese = ie_preprocess(doc_chinese, "cn")
# grammar_chinese = "NP: {<n|vn>?<v>?<n>?}"  # 词性正则表达式
# cp = nltk.RegexpParser(grammar_chinese)  # 初始化正则分块器
# result = cp.parse(sentences_chinese)  # 用正则分块器处理词性化的文本
# print(result)  # 打印结果
# result.draw()   # 显示图形结果
#
# # 英文使用示例
# sentences_english = ie_preprocess(doc_english, "en")[0]
# grammar_english = "NP: {<DT|PP\$>?<JJ>*<NN>}"
# # grammar = r""" NP: {<.*>+} # Chunk everything }<VBD|IN>+{ # Chink sequences of VBD and IN """  # 缝隙
# cp = nltk.RegexpParser(grammar_english)
# result = cp.parse(sentences_english)
# print(result)
#
# result.draw()

# nltk.app.chunkparser()   # 图形调试器，然而我不会用


import urllib
import json
import re
url_get_base = "http://api.ltp-cloud.com/analysis/"
args = {
        'api_key': '01x1D3u3s42DXgEMRPYjYuDLxJya4cvRzbym6fRc',
        'text': doc_chinese,
        'pattern': 'all',
        'format': 'json',
}
result = urllib.urlopen(url_get_base, urllib.urlencode(args)) # POST method
sentences = json.loads(result.read())

print("原文内容为: %s" %doc_chinese)
result_sentences = []
for sentence in sentences[0]:
    ids = {}
    words = []
    entities = []
    for word in sentence:
        """
        id          句子中的词的序号，其值从0 开始;
        cont        分词内容;
        pos         词性标注内容;
        ne          命名实体内容;
        
        parent 与 relate 成对出现;
        parent      为依存句法分析的父亲结点 id 号;
        relate      为相对应的关系;
        
        semparent 与 semrelate 成对出现;
        semparent   为语义依存分析的父亲结点 id 号;
        semrelate   为相对应的关系;
        
        """

        print("=======word========")
        print(word["cont"])
        print(word["ne"])
        # print(word["parent"])
        # print(word["relate"])
        # print(word["semparent"])
        # print(word["semrelate"])

        words.append(word["cont"])
        if word["arg"] != []:
            for entry in word["arg"]:
                if len(re.findall('A[0-9]?', entry["type"]))!= 0:
                    entities.append(tuple((entry["beg"], entry["end"], word["cont"])))

        try:
            ids[word["parent"]] += word["cont"]
            # ids[word["semparent"]] += word["cont"]
        except KeyError:
            ids[word["parent"]] = word["cont"]
            # ids[word["semparent"]] = word["cont"]

    pre_sentences = {}
    sentence_segments = []
    for entry in entities:
        try:
            pre_sentences[entry[2]] += entry[2] + "".join(words[entry[0]: entry[1]+1])
        except KeyError:
            pre_sentences[entry[2]] = "".join(words[entry[0]: entry[1] + 1])

    for i in pre_sentences.keys():
        if not len(re.findall(i, pre_sentences[i])) == 0:
            sentence_segments.append(pre_sentences[i])

    result_sentences.append(u",".join(sentence_segments))

# print(u"。".join(result_sentences))

# print(nltk.corpus.treebank.tagged_sents()[22])
